﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Galnote.Web
{
	/// <summary>
	/// 为处理用户相关信息提供辅助方法。
	/// </summary>
	public static class UserHelper
	{
		/// <summary>
		/// 将角色类型转换为对应的名称集合。
		/// </summary>
		/// <param name="value">用户的角色类型。</param>
		/// <returns>用户的角色名称的集合。</returns>
		public static IEnumerable<string> ToRoleNames(this UserRoleTypes value)
		{
			foreach(UserRoleTypes i in Enum.GetValues(typeof(UserRoleTypes)))
			{
				if (value.HasFlag(i))
				{
					yield return i.ToString();
				}
			}
		}

		/// <summary>
		/// 将角色名称集合转换为角色类型。
		/// </summary>
		/// <param name="value">用户的角色名称的集合。</param>
		/// <returns>角色的类型。</returns>
		public static UserRoleTypes ToRoleTypes(this IEnumerable<string> value)
		{
			var result = UserRoleTypes.None;

			if (value == null)
			{
				return result;
			}

			foreach (var i in value)
			{
				UserRoleTypes v;
				if (Enum.TryParse(i, out v))
				{
					result |= v;
				}
			}

			return result;
		}

		/// <summary>
		/// 获取用户验证信息对应的用户。
		/// </summary>
		/// <param name="value">要获取用户对象的用户验证信息。</param>
		/// <returns>用户验证信息对应的用户。如果用户不存在，则返回 <c>null</c>。</returns>
		public static User GetUser(this AuthUser value)
		{
			using (var container = new GalnoteModelContainer())
			{
				var result = from i in container.UserSet
							 where i.Name == value.Name
							 select i;

				return result.SingleOrDefault();
			}
		}
	}
}